home *** CD-ROM | disk | FTP | other *** search
-
- AVA CHANGES
- Uros Platise (c) 1998,1999
- Special thanks to Denis Chertykov.
-
-
- 0.1.3 -> 0.1.4 (8. Januar, 1999)
- ================================
- * keyword: ds.X is now fixed: storage size can now also
- be given as a set macros
-
- * public/common symbols are added
- Public macro can now be defined multiple times
- only and only if they completely match.
-
- An example of usage:
- #define public __AVR_WRAP_AROUND
-
- The symbol __AVR_WRAP_AROUND must be put into the
- object file otherwise linker will never get it.
- Usually if more than one source has defined a public
- sym, ava produces error; but in this case not.
- Because __AVR_WRAP_AROUND is defined with the same
- macro "1".
-
- * wrap around option added (already included in arch.inc)
- macro: __AVR_WRAP_AROUND
-
- * BUG FIX: Remarks starting with ; can be now written as:
- #define test;remark, remark, remark
-
- * BUG FIX: extern virtual symbols now work and also public references
- cross files are now fixed.
-
-
- 0.1.4 -> 0.1.5 (9. Januar, 1999)
- ================================
- * BUG FIX: "dc.w -1" produced wrong output: "ffffffff" instead "ffff"
-
- * System macros, can now be declared before arch.inc is loaded.
- Example:
- #define __X1 /* system macros should start with */
- #define __X2 /* two underlines "__" */
- Usage: to redefine segment length as __ERAM_SIZE
- #define AT90S8515 /* at this point, arch.inc is included */
-
- * BUG FIX: ava is now "friendly" compiled with egcs++ compiler
-
- * Expressions are now added to #ifdef statements. For example:
- #ifdef A | B
- ...
- #endif
- All symbols that are not defined at the #ifdef statement,
- are taken as zeros.
-
- * Expression parser is now extended to the following operations:
- a>b, a<b, a==b, a<=b, a>=b
- It returns 1 or 0, depending on condition.
- You can use them anywere where expressions are allowed
- (including the ifdef statements)
-
- Note: to support above feature, character = has moved
- from CONTROL group to MATH group (since it was not
- thought to be a part of expressions at early begining).
-
- I hope I did not miss something: if you find somewhere a
- somewhat correct notation (as: seg abs=1 flash) but you
- get error at '=' character; this is because = has changed
- its group. (In that case, immediatelly report me an error).
-
- The following changes were submitted by Denis:
- ----------------------------------------------
- * FILES are now linked in the same order as listed in the command line
-
- * -e option added to disable reports
-
- * On return, ava return number of errors (returns zero on success)
-
- * BUG FIX: ld rX,Z
-
-
- 0.1.5 -> 0.1.6 (15. Januar, 1999)
- =================================
- * Listing file -L switch is now specifed to the compiler and to
- the linker any more. To files, which were assembled with -L switch,
- a listing is generated; other are skipped. (new)
-
- * Command line parameters are now given in a little bit different form.
- Parameters -DLIl should be written as:
-
- ava -Dmacro_name -Lasm_source -Iinclude_directory -llog_file
-
- Output file remained the same:
-
- ava -o out_file
-
- * Setting the log file (the -l <log_filename>) multiple times (new)
-
- This feature is somehow intented for use with avr-gcc which is by
- default run with -e option. If user wants to get the segment
- information, he must declare new log file as:
-
- avr-gcc ....... -Xlinker -lava.log
-
- * BUG FIX: #ifdef
- ava -Dmacro generate "Bad format: macro" report in #ifdef
- statements.
-
- * #ifdef <extern_symbol> (new)
- Now you can test the following case:
-
- extern _idle
- #ifdef _idle
- rcall _idle
- #endif
-
- This features enhances modular programming.
-
- * arch.inc: Protection of the register and io_space (new)
- All models excluding the AT90S1200 have memory mapped
- register and io_space. It might happen that user forget
- to fill or skip that area (from 0 to 0x5F).
-
- To avoid this problem, two fixed abs and size segments
- are declared (see arch.inc for details).
-
- * arch.inc: segment: eram.sram (removed)
- It showed up it is useless.
-
-
- 0.1.6 -> 0.1.6.1 (15. Januar, 1999)
- ===================================
- * BUG FIX: #else
- The following code did not work:
- #ifdef A
- #ifdef B
- clr r0
- #else
- tst r0
- #endif
- #endif
-
- It produced code for "tst r0". Every #else in the second or higher
- stack level returned wrong result.
-
-
- 0.1.6.1 -> 0.1.7 (18. Januar, 1999)
- ===================================
- * BUG FIX: expression termination
- The following example did not work:
- ldi r16,3+123+2 out PORTB,21
-
- In the case that two or more instructions were in the same line,
- what is often used in macros, expression yawned an error
- "Operator is required before out". Now it is fixed and it only
- yawns that error when expression is not closed as in example:
-
- ldi r16,3+(6+2 out PORTB,21
-
- This is malformed expression and operator should be placed between
- 2 and out token.
-
- * BUG FIX: sortRefs() function cycled when Abstract and Non-Abstract
- types were used within the same sub-segment.
-
- * New machanism for output streams is developed (new)
-
- * Empty Segments are now given an absolute address (new)
- This feature allows you to put the segment size in your code.
- Example:
-
- seg flash.list
- seg flash.list.T
-
- seg flash.code
- dc.w _flash_list_T - _flash_list
-
- * Segment Align Option (new)
- With align option, linker checks the sizes of segments and if
- they not much with the align size, it extends them.
- See next item for example.
- By default align equals 1. If another value is specifed all
- childs will use the same allignment. If child has specifed its
- own align size, it must be the same as the parent's one.
- Unless error is produced.
-
- * Mirror Segments (new)
- You can mirror one segment to another. Only one mirror per
- segment is possible. Mirror segment must be already declared.
- Example:
-
- seg align=2 flash.data
- seg abstract mirror=flash.data eram.data
-
- All data from eram.data will be copied from eram.data to flash.data
- This feature is required by GCC.
-
- Mirror segment can be declared only once. Otherwise, error will
- be produced.
-
- * For use with Denis avr-gcc, prep program is not needed anymore with new
- crt1.s
-
-
- 0.1.7 -> 0.1.7.1 (23. Januar, 1999)
- ===================================
- * FEATURE FIX: Abstract flag is now forwared cross files to the same
- segments. An example:
-
- Segment declared as:
- seg abstract eram.test
-
- And in other file:
- seg eram.test
-
- Was not abstract anymore, since the other segment did not specify
- it.
-
- * Little (new) and Big Endian (previous format) DC formats
- Keyword "dc.x" defines constant of length x. Now you may also define
- the output format of the dc.x keyword. These are:
- * big endian (0x1234 is translated in its original form)
- * little endian (0x1234 - bytes are swaped - 0x3412)
-
- The user may choose which format he wants to use.
- Examples:
- dc.b 23,21,51 /* normal bytes */
- dc.w 0x1234 /* little endian, output is 0x3412 */
- dc.W 0x1234 /* big endian - output: 0x1234 */
- dc.l 0x12345678 /* little end. - output: 0x78563412 */
- dc.L 0x12345678 /* big endian - output: 0x12345678 */
-
- This feature was required by the avr-gcc compiler (which requires
- little endian format)
-
- * FEATURE FIX: ParseMacro() add one space between two tokens
- Space is now added if lxP->stick is false - that means,
- tokens were seperated in the original source.
-
- * FEATURE FIX: Removable Mirror Segments
- Even removable segment can now be mirror segment. At least one
- public label must be referenced within the segment and it won't
- be removed.
-
- * Preprocessor Directive: #arch (new)
- To avoid conflicits with selecting the device, special directive
- "#arch device_name" was added which does excatly the same as
- the first non-system define.
-
- * FEATURE FIX: Segment Size can now be redefined to bigger one
- Problem: libgcc and crt1 are compiled with default minimum
- __ERAM_SIZE values. If users specifes bigger values in target.inc
- or before #arch directive, linker reported an error.
-
- Solution: if two segments have different sizes, bigger one is
- used.
-
- Note: Due to this feature, YOU SHOULD re-assemble crt1.s and
- libgcc.s files again!
-
- * FEATURE FIX: Segment warning "Extending segment for x byte" is moved
- to info and is not put to the stderr anymore if -l or -e option
- is specified.
-
- * Multiple errors are now reported (new)
- When assembler catches syntax error, unrolls the line and
- continues with syntax analyses.
-
-
- 0.1.7.1 -> 0.1.7.2 (24. Januar, 1999)
- =====================================
- * New AVR models are added: AT90S*33, AT90S*34 and AT90S*35
-
- * avr.inc has been extensively changed
- avr.inc now selectively include Atmel's AVR definition
- files according to the device selection.
- It also includes some more macros - see: avalib/avr.inc
-
- Atmel's AVR definition files are provided in
- the "avalib/avr" directory.
-
- Note: the user should include "avr.inc" only after the
- "#arch ..." directive.
-
- * Some little changes are done to warning and info reports ...
-
-
- 0.1.7.2 -> 0.2 (7. February, 1999)
- ==================================
- * BUG FIX: mul instruction is moved away from the ATmega families
-
- * target.inc is now automatically included if -T command line
- swithc is specified.
-
- * ava development directory structure a little bit organised and
- installation procedures are included within the Makefiles.
-
- * some variables were given init values to satisfy c++ compiler
- when executed with -O option
-
- * BUG FIX: AVR_WRAP_AROUND options removed from AT90S4* models.
-
- * BUG FIX: #else produced stack error if used out of #ifdef/#endif
- statement
-
- * NEW: new preproc. directive: #if (avr.inc fix)
- This directive now replaces former #ifdef since version 0.1.5.
- Because of C compatibility, #ifdef checks for presence of symbol
- only and #if evaluates expression.
-
- Note: avr.inc can be also used by GNU C compiler.
-
- You shall get an error message if ifdef is used in wrong way.
-
- * NEW: command line option: -p (pipe)
- The AVA can read input from stdin and output to the stdout
- unless output file name is specifed.
- Linker cannot read from stdin but can output to stdout:
-
- ava test.o -o stdout
-
- This will do.
-
- * EXTENDED: macros are now also enabled during PASS2
- This extendes the use of macros - they can be defined anywhere in
- the source.
- Attributes (extern, virtual) now make effect on macros too.
- See documentation for help on usage.
-
- * NEW: 32 bit CRC Error Detection is added to Object Files
- ava-0.1.7.2 object files are not compatible with 0.2
-
- * NEW: 32 bit CRC Error Detection is added to uasm output file.
- The uisp versions 0.1.3 and lower will simply ignore it.
-
- * NEW: User's Manual is now available in doc directory. :)
-
-
- 0.2 -> 0.2.1 (18. February, 1999)
- =================================
- * NEW: command line (cmd) option -v (verbose) added and -e "removed"
- Info messages are now disabled by default. Add -v to enable
- them.
-
- -e option is not removed but does nothing - dummy switch.
- It will be removed far in the future.
-
-
- * NEW: cmd option -T extended
- Target Def. File may be specified besides the -T switch as:
- -Ttargetfile example: -Tpsb.inc
-
- (psb = power supply board :))
- The key point of this file is that is parsed before the source
- code.
-
- * NEW: cmd option -A added
- Declare target device as:
- -Adevice example: -AAT90S1200
-
- Might be useful for different kind of testing.
-
- * EXTENDED: switch -I extended to files
- If additional file needs to be included temporarly to a source
- use the following syntax:
-
- -Ifilename
-
- The file 'filename' will be search in the current directories
- and those on the search list specified by:
-
- -Idirname
-
- option.
- The order of the -I switch in the command line does only effect
- on the order these include files are included. Source is processed
- last.
-
- The target file is always included before include files.
-
- * NEW: preprocessor directive: #error
- Produces error and prints string followed by the #error directive.
- Example1:
- #ifndef __AGE
- # error "Macro __AGE is not defined."
- #endif
-
- Example2:
- #if A==2
- # error A
- #endif
-
- * NEW: preprocessor directive: #print
- Prints text numbers and macros ...
- Example:
- #print "A equals: " A
-
- * EXTENDED: To AVA User's Manual examples are added.
- (and of course, new switches are also documented).
-
- * BUG FIX (avr.inc): macro mmio was disabled and not enabled if
- RAM (SRAM or and ERAM) was present.
-
- * EXTENDED: Macro parameters may be split into several lines.
- Example1:
- #define macro_xxx_yyy(
- long_parameter_1, /* comment 1 */
- long_parameter_2 /* comment 2 */
- ) \
- function
-
-
- 0.2.1 -> 0.2.2 (19. February, 1999)
- ===================================
- * BUG FIX: Segment Fitter
- Serious problem with absolute segments is fixed.
-
-
- 0.2.2 -> 0.2.3 (2. March, 1999)
- ===============================
- * NEW: command line option --help added
- Does the same as -h; needed by the GNU C compiler
-
-
- 0.2.3 -> 0.2.4 (12. March, 1999)
- ================================
- * NEW: AVR-CORE Bug Checking Mechanism
- Special flag -favr_noskipbug is provided to disable
- the checking mechanism.
- See ava User's Manual for details of this bug.
-
- * NEW: -f option to declare public macros via the command line
-
-
- 0.2.4 -> 0.2.5 (23. March, 1999)
- ================================
- * BUG FIX: Segment tmp variable was not cleared in the function parse()
- (Thanks to Nicolas Graffet who has found that strange behaviour.)
-
- * NEW: Out of space report now informs the status of the size of
- required bytes per segment and available bytes per segment.
-
-